package com.hulk.rpc.filter;

import com.hulk.rpc.protocol.Request;
import com.hulk.rpc.protocol.Response;

/**
 * @author xuxukang
 * @date 2019-03-10 09:57
 */
public interface ClientFilter extends Filter {

  String CLIENT_FILTER_DENY = "client filter deny this request";

  /**
   * 发送请求之前的一些逻辑
   *
   * @param request 请求
   * @return 是否允许发送请求
   */
  boolean onSend(Request request);

  /**
   * 接收到响应时的一些逻辑
   *
   * @param request  请求
   * @param response 响应
   */
  void onReceive(Request request, Response response);

  /**
   * 响应错误时的处理逻辑
   *
   * @param request   请求
   * @param response  响应
   * @param throwable 错误
   */
  void onError(Request request, Response response, Throwable throwable);

}
